package main

import "fmt"

func foo1() {
	sl := []int{1, 2, 3}
	defer func(a []int) {
		fmt.Println(a)

	}(sl) // 在注册到 数据栈上直接对 sl 进行求值， 输出 1 2 3

	sl = []int{3, 2, 1}
	_ = sl
}

func foo2() {
	sl := []int{1, 2, 3}
	defer func(p *[]int) {
		fmt.Println(*p)
	}(&sl) // 立刻对 sl 求值，得到 slice 的地址 输出 3， 2， 1

	sl = []int{3, 2, 1}
	_ = sl
}

func main() {
	foo1()
	foo2()
}
